package com.leetcode.根据数据结构分类.数组;

/**
 * @author: ZhouBert
 * @date: 2021/2/7
 * @description: 665. 非递减数列
 * https://leetcode-cn.com/problems/non-decreasing-array/
 */
public class A_665_非递减数列 {

	public static void main(String[] args) {
		int[] nums = new int[]{3, 4, 2, 3};
		nums = new int[]{4, 2, 3};
		nums = new int[]{-1, 4, 2, 3};
		A_665_非递减数列 action = new A_665_非递减数列();
		boolean res = action.checkPossibility(nums);
		System.out.println("res = " + res);
	}

	/**
	 * 重新纠正了一下思路：
	 * 1.遍历一遍，找到非递减序列
	 *
	 * @param nums
	 * @return
	 */
	private boolean checkPossibility(int[] nums) {
		//1.边界判断
		int len = nums.length;
		if (len == 1) {
			return true;
		}

		return true;
	}

	/**
	 * 感觉思路很简单
	 * 做一个标志位，遇到不符合的设置为 true，再次遇到就 return false
	 * --
	 * 这种思路其实是有漏洞的！因为调整的元素可能是在前面，也可能是在后面
	 * 这个有点贪心算法的感觉，鼠目寸光了
	 *
	 * @param nums
	 * @return
	 */
	public boolean checkPossibilityFail(int[] nums) {
		//1.边界判断
		int len = nums.length;
		if (len == 1) {
			return true;
		}

		//是我考虑的不周全，非递减序列跟递增序列的反面。
		int max = nums[0];
		//2.
		boolean flag = false;
		for (int i = 1; i < len; i++) {
			if (nums[i - 1] > nums[i]) {
				if (nums[i] == -100_000) {
					return false;
				}
				if (flag) {
					return false;
				}
				flag = true;
				if (i == 1) {
					max = Math.min(max, nums[i]);
				} else {
					max = Math.max(max, nums[i]);
				}
			} else {
				if (nums[i] < max) {
					return false;
				}
				max = Math.max(max, nums[i]);
			}
		}


		return true;
	}

}
